package com.example.shuiyin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.shuiyin.dto.UserDto;
import com.example.shuiyin.dto.UserRegistrationDTO;
import com.example.shuiyin.entity.User;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 用户服务
 */
public interface UserService {
    /**
     * 根据ID获取用户
     */
    User getUserById(Long userId);
    
    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);
    
    /**
     * 根据邮箱获取用户
     */
    User getUserByEmail(String email);
    
    /**
     * 根据手机号获取用户
     */
    User getUserByPhone(String phone);
    
    /**
     * 根据OpenID获取用户
     */
    User getUserByOpenid(String openid);
    
    /**
     * 获取用户信息DTO
     */
    UserDto getUserInfo(Long userId);
    
    /**
     * 分页获取用户列表
     */
    Page<UserDto> getUsers(int page, int size, String keyword);
    
    /**
     * 创建用户
     */
    Long createUser(User user);
    
    /**
     * 更新用户
     */
    boolean updateUser(User user);
    
    /**
     * 删除用户
     */
    boolean deleteUser(Long userId);
    
    /**
     * 更新用户等级
     */
    boolean updateUserLevel(Long userId, Integer level);
    
    /**
     * 更新用户密码
     */
    boolean updatePassword(Long userId, String oldPassword, String newPassword);
    
    /**
     * 更新用户头像
     */
    boolean updateAvatar(Long userId, String avatarUrl);
    
    /**
     * 保存用户头像
     */
    String saveUserAvatar(Long userId, MultipartFile file) throws IOException;
    
    /**
     * 注册新用户
     */
    User registerUser(UserRegistrationDTO userDTO);
    
    /**
     * 根据ID查找用户
     */
    User findById(Long id);
    
    /**
     * 根据用户名查找用户
     */
    User findByUsername(String username);
    
    /**
     * 根据邮箱查找用户
     */
    User findByEmail(String email);
    
    /**
     * 根据手机号查找用户
     */
    User findByPhone(String phone);
    
    /**
     * 根据OpenID查找用户
     */
    User findByOpenid(String openid);
    
    /**
     * 删除账号
     */
    boolean deleteAccount(Long userId);
    
    /**
     * 保存头像
     */
    String saveAvatar(MultipartFile file, String path, Long userId) throws IOException;
    
    /**
     * 保存用户
     */
    User save(User user);
    
    /**
     * 获取所有用户
     */
    List<User> findAll();
} 